import time

from selenium import webdriver
from selenium.webdriver import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.firefox.service import Service
import unittest
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions


class MyTestCase(unittest.TestCase):
    driver = None

    @classmethod
    def setUpClass(cls) -> None:
        service = Service(executable_path="../driver/geckodriver.exe")
        cls.driver = webdriver.Firefox(service=service)

        # 在 对元素的加载时间进行 设置时 使用  固定等待 浪费时间
        # 我们 选择使用 隐式等待或者 显示等待
        # 隐式等待  对脚本中的全部的元素定位生效
        # 显示等待是  只对 某一个 元素定位生效
        """
            1、如果 想要使用 显示等待 首先要导入 显示等待的 模块
            2、对所需要进行 显示等待的 元素定位的脚本进行 编写显示等待  的时间
        """

        # # 1、隐式等待
        # # 1.1、设置全局的元素定位的 隐式等待时间
        cls.driver.implicitly_wait(10)
        # # 1.2、设置全局的脚本加载的 隐式等待时间
        # cls.driver.set_script_timeout(10)
        # # 1.3、设置全局的页面刷新的 隐式等待时间
        # cls.driver.set_page_load_timeout(10)

    def test_time_iframe(self):
        """测试 网页中句柄的问题"""

        self.driver.get(
            "file:///D:/CourseWare/%E8%AF%BE%E4%BB%B6/Study%E8%AF%BE%E4%BB%B6/%E7%AC%AC%E4%B8%89%E9%98%B6%E6%AE%B5/testhtml/workspaceHtml/iframeDemo.html")

        # 如果我们操作的元素 是 在 内联框架中的  那么  我们需要 切换光标到 所需要的 内敛框架中，才能操作所需要的元素
        # self.driver.switch_to.frame('w1')  # 通过 内联框架的标签中的 name 属性来做的切换
        # self.driver.switch_to.frame(0)  # 通过 网页中的 内敛框架的索引中来切换的
        self.driver.switch_to.frame(self.driver.find_element(By.NAME, "w1"))

        # 通过 元素定位的方式 去 点击网页中 的 test1 超链接
        self.driver.find_element(By.LINK_TEXT, "test1").click()

    @classmethod
    def tearDownClass(cls) -> None:
        # cls.driver.close()  # 只会 关闭一个 标签页
        # cls.driver.quit()  # 推出浏览器  全部关闭所有的标签页

        pass


if __name__ == '__main__':
    unittest.main()
